package org.jsola.contract.service;


import org.apache.ibatis.annotations.Param;
import org.jsola.contract.dao.IContractStatisticsDAO;
import org.jsola.contract.query.ContractQuery;
import org.jsola.contract.vo.*;
import org.jsola.core.Page;
import org.jsola.core.service.IService;

import java.util.Date;
import java.util.List;

/**
 * @author huangrun
 */
public interface IContractOverviewService extends IService<IContractStatisticsDAO, ContractStatisticsVO> {

    /**
     * 获取一个月的每天的 统计数据
     * @param siteId siteId
     * @return list 每天的 统计数据
     */
    List<ContractOfSignForListVO> selectMonthForListCount(String siteId);

    /**
     * 获取一个星期的每天的 统计数据
     * @param siteId siteId
     * @return list 一个星期的每天的 统计数据
     */
    List<ContractOfSignForListVO>  selectWeekForListCount(String siteId);

    /**
     * 获取开始时间到结束时间的 合同的统计数据（每天的统计数据）
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param subjectIds 业务ids
     * @param siteId siteId
     * @return list 每天的 统计数据
     */
    List<ContractOfSignForListVO> selectContractCountDay(Date startDate, Date endDate,
                                                      List<String> subjectIds, String siteId);

    /**
     * 获取开始时间到结束时间的 合同的统计数据（每月的统计数据）
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @param subjectIds 业务ids
     * @param siteId siteId
     * @return list 每月的 统计数据
     */
    List<ContractOfSignForListVO> selectContractCountMonth(Date startDate, Date endDate,
                                                      List<String> subjectIds, String siteId);

    /**
     * 获取一年的每月的 统计数据
     * @param siteId siteId
     * @return list 每月的 统计数据
     */
    List<ContractOfSignForListVO>  selectYearForListCount(String siteId);

    /**
     * 时间段内合同签署统计
     *
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param siteId siteId
     * @return list list
     */
    List<ContractOfSignForListVO>  selectTwoTimePeriodsForCount(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("siteId")String siteId);

    /**
     * 分页查询合同
     * @param contractQuery 查询条件
     * @param siteId 所属站点id
     * @return 合同列表信息
     */
    Page<ContractListVO> selectPage(ContractQuery contractQuery, String siteId);

    /**
     * 分页查询合同（多个subjectId 进行查询）
     * @param contractQuery 查询条件
     * @param siteId 所属站点id
     * @return 合同列表信息
     */
    Page<ContractListVO> selectPageBySubjectIds(ContractQuery contractQuery, String siteId);


    /**
     * 分页查询用工单位排名
     * @param contractQuery 查询参数
     * @param siteId siteId
     * @return 用工单位排名
     */
    Page<ContractStatisticsEmpUnitsVO> selectComForRankCount(ContractQuery contractQuery, String siteId);

    /**
     * 查询用工单位排名
     * @param siteId siteId
     * @return 用工单位排名List
     */
    List<ContractStatisticsEmpUnitsVO> selectComForRankCountList(String siteId);

}